<?php
/*
 * @Descripttion: 
 * @version: 1.0
 * @Author: Sam
 * @Date: 2020-10-21 11:41:30
 * @LastEditors: Sam
 * @LastEditTime: 2020-12-16 17:45:10
 */

namespace repositories;

use app\admin\model\system\SystemAttachment;
use app\models\user\User;
use app\admin\model\UserToken;
use exceptions\AuthException;
use think\db\exception\ModelNotFoundException;
use think\db\exception\DataNotFoundException;
use think\exception\DbException;

/**
 * Class UserRepository
 * @package crmeb\repositories
 */
class UserRepository
{
    /**
     * 管理员后台给用户添加金额
     * @param $user
     * $user 用户信息
     * @param $money
     * $money 添加的金额
     */
    public static function adminAddMoney($user, $money)
    {

    }

    /**
     * 管理员后台给用户减少金额
     * @param $user
     * $user 用户信息
     * @param $money
     * $money 减少的金额
     */
    public static function adminSubMoney($user, $money)
    {

    }

    /**
     * 管理员后台给用户增加的积分
     * @param $user
     * $user 用户信息
     * @param $integral
     * $integral 增加的积分
     */
    public static function adminAddIntegral($user, $integral)
    {

    }

    /**
     * 管理员后台给用户减少的积分
     * @param $user
     * $user 用户信息
     * @param $integral
     * $integral 减少的积分
     */
    public static function adminSubIntegral($user, $integral)
    {

    }

    /**
     * 获取授权信息
     * @param string $token
     * @return array
     * @throws AuthException
     * @throws DataNotFoundException
     * @throws DbException
     * @throws ModelNotFoundException
     */
    public static function parseToken($token): array
    {
        if (!$token || !$tokenData = UserToken::where('token',$token)->find()){
            throw new AuthException('请登录', 2);
        }
    
        if($tokenData && time() >= $tokenData->expire_time){
            throw new AuthException('登录已过期,请重新登录', 3);
        }
        $user = User::get($tokenData->uid);
        if (!$user || $user->id != $tokenData->uid) {
            throw new AuthException('登录状态有误,请重新登录', 4);
        }
        return compact('user', 'tokenData');
    }

}